package com.ysw.lucene;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

/**
 * @author shiwen
 * @date 2020/6/23
 */
public class IKAnalyzerTest {

    /**
     * 使用IKAnalyzer进行中文分词（扩展分词、敏感分词）
     *
     * @throws Exception
     */
    @Test
    public void testTokenStream() throws Exception {
        // 创建一个Analyzer对象，StandardAnalyzer对象
        Analyzer analyzer = new IKAnalyzer();
        // 使用分析器对象的tokenStream方法获取一个TokenStream对象
        TokenStream tokenStream = analyzer.tokenStream("", "全文检索是将整本书java、整篇文章中的任意内容信息查找出来的检索，java。它可以根据需要获得全文中" +
                "有关章、节、段、句、词等信息，计算机程序通过扫描文章中的每一个词，对每一个词建立一个索引，指明该词在文章中出现的次数和位置，当用户查询时根据建立的索引查找，类似于通过字典的检索字表查字的过程。" +
                "杨世文公安局经过几年的发展，全文检索从最初的字符串匹配程序已经演进到能对超大文本java、java，语音、java，图像、活动影像等非结构化数据进行综合管理的大型软件。本教程只讨论文本检索。");
        //  向TokenStream对象中设置一个引用，相当于数一个指针
        CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
        // 调用TokenStream对象的reset方法，如果不调用会抛出异常
        tokenStream.reset();
        // 使用while循环遍历TokenSteam对象，如果返回true则表示搜索到了对象，否则遍历结束
        while (tokenStream.incrementToken()) {
            // 打印引用中的值
            System.out.println(charTermAttribute.toString());
        }
        // 关闭TokenSteam对象
        tokenStream.close();
    }

}